<?php
namespace App\Common\Lib\Fun\Str\Encrypt;

use App\Common as com;

class OpensslHelper extends com\Lib\LibBase {
	/**
	 * 向量
	 * @var string
	 */
	const IV = "HijtYtYWkynffdT0"; // 16位
	/**
	 * 默认秘钥
	 */
	const KEY = 's7QFnV28ZBf30Zdtj92An9vKHJHWTyjD'; // 32位
	
	/**
	 * 加密字符串
	 * 参考网站： https://segmentfault.com/q/1010000009624263
	 * @param str $data 待加密字符串
	 * @param str $key 加密key(可空，为空则使用默认值)
	 * @param str $iv 向量(可空，为空则使用默认值)
	 * @return str 加密密文
	 */
	public static function encrypt( $data, $key = self::KEY, $iv = self::IV ){
		
		// echo base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "1234567890123456", pkcs7_pad("123456"), MCRYPT_MODE_CBC, "1234567890123456"));
		// echo base64_encode(openssl_encrypt("123456","AES-128-CBC","1234567890123456",OPENSSL_RAW_DATA,"1234567890123456"));
		// $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, self::$iv);
		// return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "1234567890123456", pkcs7_pad("123456"), MCRYPT_MODE_CBC, "1234567890123456"));
		return base64_encode( openssl_encrypt( $data, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv ) );
	}
	
	/**
	 * 解密字符串
	 * @param str $data 待解密字符串
	 * @param str $key 加密key(可空，为空则使用默认值)
	 * @param str $iv 向量(可空，为空则使用默认值)
	 * @return str 加密密文
	 */
	public static function decrypt( $data, $key = self::KEY, $iv = self::IV ){
		return openssl_decrypt( base64_decode( $data ), "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv );
	}
	
}
